#include "picshow.h"
#include "ui_picshow.h"

PicShow::PicShow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::PicShow)
{
    ui->setupUi(this);
    ui->previousBtn->setIcons(":/icon/previous.png",":/icon/previous_hover.png",":/icon/previous_press.png");
    ui->nextBtn->setIcons(":/icon/next.png",":/icon/next_hover.png",":/icon/next_press.png");

    QGraphicsOpacityEffect *opacity_pre = new QGraphicsOpacityEffect(this);
//    设置透明度为0
    opacity_pre->setOpacity(0);
    ui->previousBtn->setGraphicsEffect(opacity_pre);

    QGraphicsOpacityEffect *opacity_next = new QGraphicsOpacityEffect(this);
//    设置透明度为0
    opacity_next->setOpacity(0);
    ui->nextBtn->setGraphicsEffect(opacity_next);

    _animation_show_pre = new QPropertyAnimation(opacity_pre, "opacity", this);
//    设置为渐变效果:线性渐变
    _animation_show_pre->setEasingCurve(QEasingCurve::Linear);
//    设置渐变时间：500ms
    _animation_show_pre->setDuration(500);

    _animation_show_next = new QPropertyAnimation(opacity_next, "opacity", this);
//    设置为渐变效果:线性渐变
    _animation_show_next->setEasingCurve(QEasingCurve::Linear);
    //    设置渐变时间：500ms
    _animation_show_next->setDuration(500);

    connect(ui->nextBtn, &QPushButton::clicked, this, &PicShow::SigNextClicked);
    connect(ui->previousBtn, &QPushButton::clicked, this, &PicShow::SigPreClicked);
}

PicShow::~PicShow()
{
    delete ui;
}

void PicShow::ReloadPic()
{
    if(_select_path != "")
    {
        //    将图片的宽高设置在界面 gridLayout 的大小 - 20；其实和this的大小差不多，因为gridLayout就占了全局大小，这里只是换了一种写法而已
        const auto& width = ui->gridLayout->geometry().width() - 20;
        const auto& height = ui->gridLayout->geometry().height() - 20;
        _pix_map.load(_select_path);
        _pix_map = _pix_map.scaled(width, height, Qt::KeepAspectRatio);
        ui->label->setPixmap(_pix_map);
    }
}

bool PicShow::event(QEvent *event)
{
    switch (event->type()) {
    case QEvent::Enter:
        ShowPreNextButs(true);
        break;
    case QEvent::Leave:
        ShowPreNextButs(false);
        break;
    default:
        break;
    }
    return QDialog::event(event);
}

void PicShow::ShowPreNextButs(bool b_show)
{
    if(!b_show && _b_btnvisible)
    {
//        停止线性渐隐
        _animation_show_pre->stop();
//        设置开始时的效果为完全可见
        _animation_show_pre->setStartValue(1);
//        设置结束时的效果为完全不可见
        _animation_show_pre->setEndValue(0);
//        开始执行渐显效果
        _animation_show_pre->start();

//        停止线性渐隐
        _animation_show_next->stop();
//        设置开始时的效果为完全可见
        _animation_show_next->setStartValue(1);
//        设置结束时的效果为完全不可见
        _animation_show_next->setEndValue(0);
//        开始执行渐显效果
        _animation_show_next->start();

        _b_btnvisible = false;

        return;
    }

    if(b_show && !_b_btnvisible)
    {
//        停止线性渐显
        _animation_show_pre->stop();
//        设置开始时的效果为完全不可见
        _animation_show_pre->setStartValue(0);
//        设置结束时的效果为完全可见
        _animation_show_pre->setEndValue(1);
//        开始执行渐隐效果
        _animation_show_pre->start();

//        停止线性渐显
        _animation_show_next->stop();
//        设置开始时的效果为完全不可见
        _animation_show_next->setStartValue(0);
//        设置结束时的效果为完全可见
        _animation_show_next->setEndValue(1);
//        开始执行渐隐效果
        _animation_show_next->start();

        _b_btnvisible = true;

        return;
    }
}

void PicShow::SlotSelectItem(const QString &path)
{
    _select_path = path;
    _pix_map.load(path);
//    将图片的宽高设置在PicShow整个界面的大小 -20
    auto width = this->width() - 20;
    auto height = this->height() - 20;
//    将图片进行等比例拉伸
    _pix_map = _pix_map.scaled(width, height, Qt::KeepAspectRatio);
    ui->label->setPixmap(_pix_map);
}

void PicShow::SlotUpdatePic(const QString &path)
{

    _select_path = path;
    if(_select_path != "")
    {
        _pix_map.load(path);
    //    将图片的宽高设置在PicShow整个界面的大小 -20
        auto width = this->width() - 20;
        auto height = this->height() - 20;
    //    将图片进行等比例拉伸
        _pix_map = _pix_map.scaled(width, height, Qt::KeepAspectRatio);
        ui->label->setPixmap(_pix_map);
    }
}

void PicShow::SlotDeleteItem()
{
    _select_path = "";
    ui->label->clear();
}
